const MyPromise = require('./MyPromise_2');

// var p1 = new MyPromise(function (resolve, reject) {
//     setTimeout(() => {reject(5)}, 5000)
// }).then(value => console.log("Resolved value ", value), reason => console.log("Rejected reason ", reason))

// var p2 = new MyPromise((resolve, reject) => {
//     resolve('success')
//     reject('fail')
// })
 
// p2.then(v => console.log(v, 1))
// p2.then(v => console.log(v, 2))
// p2.then(v => console.log(v, 3))

// var p3 = new MyPromise((resolve, reject) => {
//     resolve('success')
// })

// p3.then(v => {
//     console.log(v)
//     return v + ' + 1';
// }).then(v => {
//     console.log(v)
//     return v + ' + 2';
// }).then(v => {
//     console.log(v)
//     return v + ' + 3';
// }).then(v => {
//     console.log(v)
// })

// var p4 = new MyPromise((resolve, reject) => {
//     resolve('success')
// })
// p4.then(v => {
//     console.log(v);
//     return other(v);
// }).then(v => console.log(v))
// function other(v) {
//     return new MyPromise((resolve, reject) => {
//         resolve(v + ' other')
//     })
// }


// var p5 = new MyPromise((resolve, reject) => {
//     resolve('333');
// })
// var p6 = p5.then(v => {
//     console.log(v);
//     return p6;
// });

// p6.then(value => {
//     console.log(value);
// }, reason => {
//     console.log(reason.message);
// })

// let p7 = new MyPromise((resolve, reject) => {
//     throw new Error('Executor error');
// })

// p7.then(v => {
//     console.log(v);
// }, r => {
//     console.log('then: ', r);
// })

// let p8 = new MyPromise((resolve, reject) => {
//     setTimeout(() => {
//         reject('fail');
//     }, 1000);
//     // setTimeout(() => {
//     //     resolve('success');
//     // }, 1000);
// })

// p8.then(v => {
//     console.log('resolve', v);
//     return 1001
// }, r => {
//     console.log('reject: ', r);
//     return 10000;
// }).then(v => {
//     console.log(v);
// })

let p9 = new MyPromise((resolve, reject) => {
    setTimeout(() => {
        reject('fail');
    }, 1000);
    // setTimeout(() => {
    //     resolve('success');
    // }, 1000);
})

p9.then().then().then(v => {
    console.log(v);
}, r => {
    console.log('reason', r);
})